/**
 * idastar.h
 *
 * @author Shane Crumlish
 */

#ifndef Rubik_s_Cube_idastar_h
#define Rubik_s_Cube_idastar_h
#include "cubeLinkedList.h"

uint8_t heuristic_function(Cube cube, uint8_t *htables[3]);

// function for goal test
bool is_goal(Cube cube);

char ida_star(Cube root, uint8_t *htables[3]);

/**
 * Search method to recursively check successors of a cube
 *
 * @param cube The current cube
 * @param g The costto reach the current node (incremented by 1 every permutation)
 * @param bound The limit to search
 * @param path The order of moves and which moves were made
 *
 */
int search(Cube cube, int g, int bound, char path[61], uint8_t *htables[3]);

#endif
